home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / e / BootTime.lha / BootTime.e next >
Encoding:
Text File  |  1996-10-02  |  15.5 KB  |  204 lines

  1. /* 
  2.  *  BootTime - Bestimmt die Zeit die jedes einzelne Programm der
  3.  *   StartUP-Sequence braucht...
  4.  *
  5.  *  © 1996 THE DARK FRONTIER Softwareentwicklungen (Grundler Mathias)
  6.  *                      turrican@starbase.inka.de 
  7.  * 
  8.  */
  9.  
  10. MODULE  'exec/io'                               /* timerbase bestimmen...               */
  11. MODULE  'devices/timer'                         /* Objekte...                           */
  12. MODULE  'locale'                                /* Offsets der Locale.library           */
  13. MODULE  'libraries/locale'                      /* Konstanten der locale.library        */
  14. MODULE  'timer'                                 /* timer.device...                      */
  15. MODULE  'tools/system'                          /* Systemkonfig...                      */
  16. MODULE  'utility'                               /* Offsets der utility.library          */
  17. MODULE  'utility/date'                          /* Konstanten und Objekte               */
  18.  
  19. ENUM    ERR_NONE                                /* es liegt KEIN fehler vor...          */,
  20.         ERR_FILE                                /* Konnte File nicht öffnen...          */
  21.  
  22. RAISE   ERR_FILE IF Open()=NIL                  /* Wenn file nicht zu öffnen -> ERROR!  */
  23.  
  24. ENUM    LOC_ERR_PRE                             /* Error-Prefix                         */,
  25.         LOC_ERR_SUF                             /* Error-Suffix...                      */,
  26.         LOC_ERR_FILE                            /* Konnte file nicht öffnen!            */,
  27.         LOC_COPYRIGHT                           /* Copyright ect...                     */,
  28.         LOC_DATE                                /* Datum:                               */,
  29.         LOC_CFG_CPU                             /* Prozessor    :                       */,
  30.         LOC_CFG_FPU                             /* Co-Prozessor :                       */,
  31.         LOC_CFG_KICK                            /* KickStart    :                       */,
  32.         LOC_CFG_GFX                             /* Chipset      :                       */,
  33.         LOC_CFG_ECS                             /* OCS/ECS                              */,
  34.         LOC_CFG_AGA                             /* AGA                                  */,
  35.         LOC_NO_SS                               /* Keine StartUP-Sequence ???           */
  36.  
  37. DEF     catalog=NIL                             /* PTR auf einen Locale-Catalog         */,
  38.         file=NIL                                /* Filehandle des Protokolls...         */,
  39.         clockdata:PTR TO clockdata              /* Für Amiga2Date (konvertierung!)      */,
  40.         tr:PTR TO timerequest                   /* Aktuelles datum ect... des timer.dev */,
  41.         tv:PTR TO timeval                       /* Aktuelle Systemzeit...               */
  42.  
  43. PROC main()     HANDLE                          /* Main-Prozedur                        */
  44.  openall()                                      /* Alles öffnen...                      */
  45.   openfile()                                    /* Filehandle öffnen...                 */
  46.    calculatetime()                              /* Zeit berechnen und so..              */
  47. EXCEPT DO                                       /* Exception-Handling                   */
  48.  IF exception>0                                 /* Wenn eine Exception vorhanden ist... */
  49.   writeC(LOC_ERR_PRE)                           /* Errorprefix ausgeben...              */
  50.    SELECT exception                             /* Exception analysieren...             */
  51.     CASE        ERR_FILE                        /* Konnte file nicht öffnen...          */
  52.         writeC(LOC_ERR_FILE)                    /* Errormeldung ausgeben...             */
  53.    ENDSELECT                                    /* Ende der Überprüfung... (exception)  */
  54.   writeC(LOC_ERR_SUF)                           /* Errorsuffix ausgeben...              */
  55.  ENDIF                                          /* Ende der Abfrage (exception>0)       */
  56.   closeall()                                    /* Alles wieder schließen...            */
  57.    closefile()                                  /* Filehandle wieder schließen...       */
  58.     CleanUp(exception)                          /* Exception als Rückgabewert...        */
  59.      VOID('$VER: BootTime 1.0 (27.09.1996) © 1996 THE DARK FRONTIER')   /*Versionsstring*/
  60. ENDPROC                                         /* Ende des Programmes...               */
  61.  
  62. PROC openall()                                  /* Alles öffnen...                      */
  63.  IF (localebase:=OpenLibrary('locale.library',37))=NIL  /* Localelibrary öffnen!        */
  64.   catalog:=NIL                                  /* Catalogptr auf NIL setzen!           */
  65.  ELSE                                           /* Falls nicht                          */
  66.   IF (catalog:=OpenCatalogA(NIL,'boottime.catalog',
  67.        [OC_BUILTINLANGUAGE,     'deutsch',
  68.         OC_VERSION,             1]))            /* Catalog öffnen...                    */
  69.   ELSE                                          /* Wenn catalog nicht da ist...         */
  70.    CloseLibrary(localebase)                     /* Locale.library schließen...          */
  71.     catalog:=NIL                                /* PTR auf NIL                          */
  72.   ENDIF                                         /* Ende der Abfrage ((catalog:=OpenCat.)*/
  73.  ENDIF                                          /* Ende der Abfrage ((localebase:=Open.)*/
  74. ENDPROC                                         /* Ende der Prozedur (openall)          */
  75.  
  76. PROC closeall()                                 /* Alles schließen...                   */
  77.  IF (catalog<>NIL) THEN CloseCatalog(catalog)   /* Localecatalog schließen...           */
  78.   IF (localebase<>NIL) THEN CloseLibrary(localebase)    /* Locale.library schließen...  */
  79. ENDPROC                                         /* Ende der Prozedur (closeall)         */
  80.  
  81. PROC openfile()                                 /* Filehandle öffnen...                 */
  82.  IF (file:=Open('ram:Boot-Protokoll.txt',NEWFILE))=NIL THEN Raise(ERR_FILE)     /* File öffnen mit Errorcheck           */
  83.   writeP(getcatstr(LOC_COPYRIGHT))              /* Copyright ins file schreiben         */
  84. ENDPROC                                         /* Ende der Prozedur (openfile)         */
  85.  
  86. PROC closefile()                                /* Filehandle schließen...              */
  87.  IF (file<>NIL) THEN Close(file)                /* Filehandle schließen...              */
  88.   file:=NIL                                     /* PTR auf NIL (Sicherheit!)            */
  89. ENDPROC                                         /* Ende der Prozedur (closefile)        */
  90.  
  91. PROC calculatetime()                            /* Eigendliche Hauptroutine...          */
  92.  DEF    bootfile=NIL                            /* Filehandle auf die StartUP-Sequence  */,
  93.         buffer[128]:STRING                      /* Zwischenpuffer...                    */,
  94.         time=0                                  /* Zeit in sekunden...                  */,
  95.         timestr[6]:STRING                       /* Ausführungszeit...                   */,
  96.         eof=$1                                  /* End of File...                       */
  97.   IF (bootfile:=Open('s:StartUP-Sequence',OLDFILE))/* Wenn die StartUP-Sequence da ist..*/
  98.    writedate()                                  /* datum ect... ins protokoll           */
  99.     REPEAT                                      /* Wiederholen...                       */
  100.      eof:=Fgets(bootfile,buffer,128)            /* Zeile holen, maximal 127 bytes+0-byte*/
  101.       time:=gettime()                           /* Zeit holen...                        */
  102.        IF eof>$00                               /* Wenn eof nocht nicht erreicht ist... */
  103.         Execute(buffer,NIL,NIL)                 /* Zeile ausführen...                   */
  104.          time:=gettime()-time                   /* Zeit zum ausführen berechnen...      */
  105.           StringF(timestr,'\d[3]: ',time)       /* Zeit in einen String wandeln...      */
  106.            writeP(timestr)                      /* String ins Protokoll...              */
  107.             writeP(buffer)                      /* Zeile ins Protokoll...               */
  108.        ENDIF                                    /* Ende der Abfrage (eof>$00)           */
  109.     UNTIL eof=$00                               /* bis ende des Files...                */
  110.    Close(bootfile)                              /* Filehandle wieder schließen!         */
  111.   closedate()                                   /* Datum wieder schließen...            */
  112.   ELSE                                          /* Keine StartUP-Sequence da????        */
  113.    writeP(getcatstr(LOC_NO_SS))                 /* Meldung ins Protokoll schreiben      */
  114.   ENDIF                                         /* File schließen...                    */
  115. ENDPROC                                         /* Ende der Prozedur (calculatetime)    */
  116.  
  117. PROC gettime()                                  /* Zeit in sekunden...                  */
  118.  DEF    time=0                                  /* Buffer für die Zeit in sekunden...   */
  119.   GetSysTime(tv)                                /* zeit holen...                        */
  120.    Amiga2Date(tv.secs,clockdata)                /* konvertieren...                      */
  121.     time:=clockdata.min*60                      /* time = Minuten * 60 (in sekunden!)   */
  122.      time:=time+clockdata.sec                   /* plus die sekunden...                 */
  123. ENDPROC time                                    /* Ende der Prozedur (gettime)          */
  124.  
  125. PROC writeC(id)                                 /* Localisierte Zeile ausgeben...       */
  126.  WriteF('\s',getcatstr(id))                     /* Localse-String holen und Ausgeben    */
  127. ENDPROC                                         /* Ende der Prozedur (writeC)           */
  128.  
  129. PROC writeP(str)                                /* String ins Protokoll schreiben       */
  130.  Write(file,str,StrLen(str))                    /* String schreiben, länge berechnen    */
  131. ENDPROC                                         /* Ende der Prozedur (writeP)           */
  132.  
  133. PROC writedate()                                /* datum, Konfig ect. ins Protokoll     */
  134.  DEF    date[11]:STRING                         /* Datum...                             */,
  135.         config:PTR TO syskonfig                 /* systemkonfig...                      */
  136.   IF (utilitybase:=OpenLibrary('utility.library',37))   /* Utility.library öffnen...    */
  137.    NEW tr, tv, clockdata                        /* Objekte initialisieren...            */
  138.     OpenDevice('timer.device',UNIT_VBLANK,tr,0) /* timer.device öffnen...       */
  139.      timerbase:=tr.io.device                    /* Timebase bestimmen...                */
  140.       GetSysTime(tv)                            /* Sytemzeit holen...                   */
  141.       Amiga2Date(tv.secs, clockdata)            /* Umrechnen (konvertieren              */
  142.      StringF(date,'\d[2].\d[2].\d[4]\n',clockdata.mday,clockdata.month,clockdata.year)  /* Datumsstr generieren */
  143.   ENDIF                                         /* Ende der Abfrage ((utilitybase:=Ope.)*/
  144.    writeP(getcatstr(LOC_DATE))                  /* Datum:                               */
  145.     writeP(date)                                /* Datum ins Protokoll schreiben        */
  146.      NEW config.check()                         /* Konfig checken lassen...             */
  147.       writeP(getcatstr(LOC_CFG_CPU))            /* Prozessor    :                       */
  148.        StringF(date,'\d\n',config.cpu)          /* Prozessor in den String kopieren...  */
  149.         writeP(date)                            /* String ins File schreiben            */
  150.       writeP(getcatstr(LOC_CFG_FPU))            /* Co-Prozessor :                       */
  151.        StringF(date,'\d\n',config.fpu)          /* Co-Prozessor in den String kopieren. */
  152.         writeP(date)                            /* String ins File schreiben            */
  153.       writeP(getcatstr(LOC_CFG_KICK))           /* Kickstart    :                       */
  154.        StringF(date,'\d\n',config.kick)         /* Kick-Version in den String kopieren. */
  155.         writeP(date)                            /* String ins File schreiben            */
  156.       writeP(getcatstr(LOC_CFG_GFX))            /* Chipset      :                       */
  157.        IF config.gfx=TRUE                       /* ECS                                  */
  158.         writeP(getcatstr(LOC_CFG_ECS))          /* ECS                                  */
  159.        ELSE                                     /* Wenn net...                          */
  160.         writeP(getcatstr(LOC_CFG_AGA))          /* AGA                                  */
  161.        ENDIF                                    /* Ende der Abfrage (config.gfx=TRUE)   */
  162.      END config                                 /* Speicher für das Objekt freigeben    */
  163. ENDPROC                                         /* Ende der Prozedur (writedate)        */
  164.  
  165. PROC closedate()                                /* Devices/Libs wieder schließen...     */
  166.     CloseDevice(tr)                             /* time.device schließen...             */
  167.    END clockdata, tv, tr                        /* Speicher de Objekte wieder freigeben */
  168.   IF utilitybase THEN CloseLibrary(utilitybase) /* utility.library schließen...         */
  169. ENDPROC                                         /* Ende der Prozedur (closedate)        */
  170.  
  171. PROC getcatstr(id)                              /* Lokalisierten String holen...        */
  172.  DEF    str                                     /* String zur Ablage...                 */
  173.   IF (catalog=NIL)                              /* Wenn der Catalog nicht offen ist!    */
  174.    SELECT id                                    /* id auswerten                         */
  175.     CASE        LOC_ERR_PRE                     /* Error-Prefix                         */
  176.         str:='Fehler: '
  177.     CASE        LOC_ERR_SUF                     /* Error-Suffix...                      */
  178.         str:='!\n'
  179.     CASE        LOC_ERR_FILE                    /* Konnte file nicht öffnen!            */
  180.         str:='Konnte das Protokollfile nicht öffnen'
  181.     CASE        LOC_COPYRIGHT                   /* Das Copyright...                     */
  182.         str:='                BootTime 1.0\n (c) 1996 THE DARK FRONTIER Softwareentwicklung\n              Grundler Mathias\n\n'
  183.     CASE        LOC_DATE                        /* Datum:                               */
  184.         str:='Datum        : '
  185.     CASE        LOC_CFG_CPU                     /* Prozessor    :                       */
  186.         str:='Prozessor    : '
  187.     CASE        LOC_CFG_FPU                     /* Co-Prozessor :                       */
  188.         str:='Co-Prozessor : '
  189.     CASE        LOC_CFG_KICK                    /* KickStart    :                       */
  190.         str:='KickStart    : '
  191.     CASE        LOC_CFG_GFX                     /* Chipset      :                       */
  192.         str:='Chipset      : '
  193.     CASE        LOC_CFG_ECS                     /* OCS/ECS                              */
  194.         str:='OCS/ECS\n'
  195.     CASE        LOC_CFG_AGA                     /* AGA                                  */
  196.         str:='AGA\n'
  197.     CASE        LOC_NO_SS                       /* Keine StartUP-Sequence               */
  198.         str:='Konnte die StartUP-Sequence nicht einlesen!\n'
  199.    ENDSELECT                                    /* Ende der Auswertung (id)             */
  200.   ELSE                                          /* Falls der Catalog offen ist!         */
  201.    str:=GetCatalogStr(catalog,id,str)           /* String holen...                      */
  202.   ENDIF                                         /* Ende der Abfrage ((catalog=NIL))     */
  203. ENDPROC str                                     /* Ende der Prozedur (getcatstr)        */
  204.